＃提示示例

在上一部分中，我们介绍了如何提示LLMs并提供了基本示例。 

在本节中，我们将提供更多使用提示实现不同任务的示例，并介绍关键概念。通常，学习概念的最佳方法是通过示例进行学习。在下面，我们涵盖了一些示例，展示了精心制作的提示可以用于执行不同类型的任务。

主题：
- [文本摘要](#text-summarization)
- [信息提取](#information-extraction)
- [问答](#question-answering)
- [文本分类](#text-classification)
- [对话](#conversation)
- [代码生成](#code-generation)
- [推理](#reasoning)

---

## 文本摘要

自然语言生成中的标准任务之一是文本摘要。文本摘要可以包括许多不同的风味和领域。实际上，语言模型最有前途的应用之一是将文章和概念概括成快速易读的摘要。让我们尝试使用提示进行基本的摘要任务。

假设我有兴趣了解抗生素，我可以尝试这样一个提示：

*提示：*
```
介绍抗生素

A:
```

*输出：*
```
抗生素是一种用于治疗细菌感染的药物。它们通过杀死细菌或防止细菌繁殖来工作，使身体的免疫系统能够抵抗感染。抗生素通常以口服形式，如片剂、胶囊或液体溶液，或者有时静脉注射。它们对病毒感染无效，不适当使用会导致抗生素耐药性。
```"A:" 是一种用于问答的显式提示格式。我在这里使用它来告诉模型需要进一步的期望。在这个例子中，暂时不清楚使用它有什么用处，但我们将在以后的例子中介绍。假设这是太多的信息，我们想要进一步概括它。实际上，我们可以指示模型像这样总结成一句话：

*提示：*
```
抗生素是一种用于治疗细菌感染的药物。它们的作用是通过杀死细菌或阻止细菌繁殖，从而使人体免疫系统可以对抗感染。抗生素通常以口服药片、胶囊或液体溶液的形式服用，有时也会静脉注射。它们对病毒感染无效，不当使用会导致抗生素耐药性。

用一句话解释上述内容：
```

*输出：*
```
抗生素是治疗细菌感染的药物，可以通过杀死细菌或阻止细菌繁殖起作用，但对病毒无效，过度使用可能导致抗生素耐药性。
```

在不过分关注上述输出的准确性的情况下，模型尝试将段落总结为一句话。您可以玩弄指示，但我们将在后面的章节中介绍。随时随地停下来实验，看看您是否可以获得更好的结果。

---
## 信息提取
虽然语言模型是训练用于执行自然语言生成和相关任务，但它也非常擅长执行分类和一系列其他自然语言处理（NLP）任务。

这是一个从给定段落提取信息的提示示例。

*提示：*在研究论文中，作者贡献声明和致谢应明确说明作者在撰写手稿和分析过程中是否、以及在何种程度上使用了诸如ChatGPT之类的AI技术。他们还应该指出使用了哪些LLM。这将引起编辑和审稿人对手稿进行更仔细的审查，以防潜在的偏见、不准确和不合适的来源引用。同样，科学期刊在选择提交的手稿时也应该透明，例如在使用LLM时。

以上段落中提到的大型语言模型基于的产品是ChatGPT。 

段落来源: [ChatGPT: five priorities for research](https://www.nature.com/articles/d41586-023-00288-7) 

---
## 问答

让模型回答特定问题的最好方法之一是改进提示格式。如前所述，提示可以组合指示、上下文、输入和输出指示，以获得更好的结果。虽然这些组件并非必需，但当你在指示方面更加具体时，结果就会更好。以下是一个更为结构化的提示示例。

*提示：*
```
根据下面的语境回答问题。回答要简短明了。如果不确定答案，回答“对答案不确定”。
格式：只返回翻译后的内容，不包括原始文本。
```## 上下文

特普利麦抗体可追溯到新泽西州的奥硕制药公司。那里，科学家们创造了抗体的早期版本，称为OKT3。该分子最初来源于小鼠，能够结合T细胞表面并限制它们的杀伤能力。1986年，该抗体被批准用于帮助预防肾移植后的器官排斥，成为首个允许人类使用的治疗性抗体。

## 文本分类

到目前为止，我们已经使用了简单的指令来执行任务。作为一名提示工程师，您需要提供更好的指令。但这还不是全部！您还会发现，在更难的用例中，仅提供指令是不够的。这就是您需要更多地考虑上下文和不同元素以在提示中使用的地方。您可以提供的其他元素包括`输入数据`或`示例`。

让我们尝试通过提供文本分类的示例来加以演示。

*提示:*
```
将文本分类为中性、负面或正面。 

文本：我认为食物还可以。 
情感：
```

*输出:*
```
中性
```

我们给出了将文本分类的指令，模型回答了‘中性’，这是正确的。这是没有问题的，但是我们真正需要的是让模型按我们想要的格式给出标签。所以我们想要‘neutral’而不是‘Neutral’。我们该如何做到这一点呢？有各种不同的方法可以做到这一点。在这里，我们关心的是具体性，因此我们提供的提示信息越详细，结果就越好。我们可以尝试提供示例来指定正确的行为。我们再试一次：

*提示:*
```
将文本分类为中性、负面或正面。 

文本：我认为假期还可以。
情感：中性 

文本：我认为食物还可以。 
情感：
```

*输出:*
```
中性
```完美！这次模型返回了“中性”，这正是我寻找的特定标签。看来提示中提供的示例帮助模型在输出方面更加具体。为了强调为什么有时候具体说明很重要，请看这个例子并找出问题：

*提示:*
```
将文本分类为中性、负面或正面。

文本: 我认为这个假期还好。
情感:
```

*输出:*
```
中立
```

这里有什么问题吗？

---

## 对话
也许您可以通过提示工程实现的其中一个更有趣的功能是指导 LLM 系统如何行事、意图和身份。当您正在构建客户服务的聊天机器人等对话系统时，这特别有用。

例如，让我们创建一个会对问题产生更多技术和科学响应的对话系统。请注意，我们通过说明明确地告诉它如何行事。这有时被称为*角色提示*。

*提示:*
```
以下是与AI研究助手的对话。助手的语气是技术和科学的。

人类：你好，你是谁？
AI：问候！我是一个AI研究助手。您今天有什么需要帮忙的？
人类：能否告诉我黑洞的产生原理？
AI:
```

*输出:*
```
当然可以！黑洞是时空的区域，在这个区域内，引力作用是如此强烈，以至于甚至光也无法逃脱。当一个非常质量的恒星死亡并且它的核心向内坍塌时，形成了一个无限密度的奇点。奇点的巨大引力将其周围的所有物质和辐射都吸引了进来，形成了黑洞。
```

我们的AI研究助手听起来有点过于技术了，对吧？好的，让我们改变这种行为，并指示系统给予更易于理解的答案。

*提示:*
```
以下是与AI研究助手的对话。助手的答案应该易于理解，甚至可以被小学生理解。

人类: 你好，你是谁？
AI: 你好！我是一个AI研究助手。有什么我可以帮你的吗？
人类: 什么是黑洞？ 
AI: 
```

*输出：*
```
黑洞是一种时空里面的区域，引力很强，什么都进不来，也出不去。是宇宙中一种非常神奇的天体。
```AI: 问候！我是一个人工智能研究助手。今天我能帮你做什么？

Human: 你能告诉我黑洞是怎样形成的吗？

AI: 

```

*Output:*
```
当质量非常大的恒星用尽燃料并向内坍塌时，就会形成黑洞。恒星的引力非常强大，甚至连光也无法逃脱它的吸引。这会在时空中形成一个引力非常强的点，称为黑洞。
```

我认为我们取得了一些进展。你可以继续完善它。我相信，如果你增加更多的例子，你可能会得到更好的结果。

---

## 代码生成
LLM非常有效的一个应用是代码生成。Copilot是一个很好的例子，您可以通过巧妙的提示来执行大量的代码生成任务。让我们看下面几个例子。

首先，让我们尝试一个简单的程序来向用户问候。

*提示信息:*
```
/*
Ask the user for their name and say "Hello"
*/
```

*Output:*
```
let name = prompt("What is your name?");
console.log(`Hello, ${name}!`);
```

你可以看到，我们甚至不需要指定使用的语言。

接下来我们换个难度。我想向你展示LLM在设计提示方面比较强大。

*提示信息:*
```
"""
Table departments, columns = [DepartmentId, DepartmentName]
Table students, columns = [DepartmentId, StudentId, StudentName]
Create a MySQL query for all students in the Computer Science Department
"""
```

*Output:*
```
SELECT StudentId, StudentName 
FROM students 
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = '计算机科学');
```

这非常令人印象深刻。在这种情况下，我们提供了有关数据库模式的数据，并要求其生成一个有效的MySQL查询。

---

## 推理
也许LLM今天最困难的任务之一是需要某种形式的推理。由于可以从LLM中获得的复杂应用程序类型，这使我最兴奋的领域之一是推理。”。有关数学能力的任务方面已经有了一些改进。也就是说，需要更先进的提示工程技术来解决当前的语义模型在执行推理任务方面存在的困难。我们将在下一篇指南中介绍这些高级技术。现在，我们会介绍一些基本的示例来展示算术能力。

*提示：*
```
9000 * 9000 等于多少？
```

*输出：*
```
81000000
```

让我们试试更难的题目。

*提示：*
```
这组数中的奇数加起来是一个偶数：15, 32, 5, 13, 82, 7, 1。

A: 
```

*输出：*
```
不，这组数中的奇数加起来是一个奇数：119。
```

回答错误！让我们通过改进提示来看看能否改善。

*提示：*
```
这组数中的奇数加起来是一个偶数：15, 32, 5, 13, 82, 7, 1。

请分步解决问题。首先，找出这组数中的奇数，然后把它们相加，并指出其结果是奇数还是偶数。
```

*输出：*
```
奇数：15、5、13、7、1
和：41
41 是一个奇数。
```

好多了，是不是？顺便说一下，我尝试了几次，有时系统会失败。如果你提供更好的说明和示例，可能会有更准确的结果。

我们将继续在本节中包括更多常见应用程序的示例。

在即将到来的部分，我们将介绍更先进的提示工程概念和技术，以提高在所有这些更困难的任务上的表现。